package cn.stacey.day03;

import java.util.Arrays;

public class DemoMemory {
	public static void main(String[] args) {
		int a = 10;
		
		// array是“引用”（内存地址），
		// new int[] {1, 2}, 是一个数组“对象”，存在堆里面
		
		int[] array = new int[] {1, 2};
		
		System.out.println(array);
		
		
		int[] array2 = {1, 2};		// 引用的作用：通过引用，可以控制它指向的对象
		
		int x = 10;
		change(x);
		System.out.println(x);
		
		System.out.println(Arrays.toString(array2));
		changeArray(array2);
		System.out.println(Arrays.toString(array2));
	}

	// 执行流程：
	// 首先定义了一个新的局部变量i，然后把它的值设置为x的一个拷贝
	// 修改i不会改变x的值
	// 基本类型的数据，是按值传递的
	public static void change(int i) {
		i = i * 3;
	}
	
	// 执行流程
	// 首先定义一个新得局部引用，然后把它的值设置为array2的拷贝，
	// 步骤一：通过引用修改对象，把对象的第一个元素改成10
	// 步骤二：把方法内部的局部引用指向了另外一个对象
	// 步骤三：通过方法内部的局部引用，修改新的对象，原来的对象不受影响
	
	public static void changeArray(int[] array) {
		array[0] = 10;	// 一：
		
		array = new int[] {2, 3};	// 二：
		array[0] = 20;			// 三：
		
		System.out.println(Arrays.toString(array));
	}
}
